<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 构造函数：根据对象的属性，创建对象，动态给添加属性，返回这个对象。
        function Hero(name, age, sex, level) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.level = level;

            // console.log(123);
            this.sing = function (address) {
                console.log("来" + address + "开演唱会");
            }

            // console.log(this);
        }

        // 通过构造函数，创建一个对象
        let lvbu = new Hero ('吕布',22, true,18);
        let zf  = new Hero('张飞',18,true , 22);
        console.log(typeof lvbu);
        lvbu.sing('郑州');
// 总结：
// 1.构造函数就是类
// 2.通过类这个模块，可以创建对象。
// 3.类是对象公共属性和方法的抽取。
// 构造函数：
// 1.作用，创建对象。
// 2.返回值是一个对象，默认省略
// 3.封装的代码是，给对象多态的添加属性和方法
// 4.this是当前对象
// 5.配合关键字new使用
// 6.函数名为大驼峰
// 7.构造函数和类是一码事
// 8.就是对象公共属性和方法的抽取。
// 9.属性名和形参尽量保持一致，可读性强。
// 约定大于规范，规范大于编码

       </script>
</body>
</html>